前端工程师必须要知道的HTTP部分
1. IETF组织制定的标准
rfc7234: https://tools.ietf.org/html/rfc7234 --- 原来的2616以被废弃
2. 格式
HTTP分为 请求Request 和 响应Response,如图:
Request
Header(例子解析):
Body:
一般请求体就是以下4种格式
- application/json
- application/x-www-form-urlencoded
- mutipart/form-data
- text/xml
Demo:
GET / HTTP/1.1 Host: time.geekbang.org
Response
Header(例子解析):
Body:
一般响应体就是HTML、JSON 或者 二进制多媒体数据
Demo:
HTTP/1.1 301 Moved Permanently Date: Fri, 25 Jan 2019 13:28:12 GMT Content-Type: text/html Content-Length: 182 Connection: keep-alive Location: https://time.geekbang.org/ Strict-Transport-Security: max-age=15768000 <html> <head><title>301 Moved Permanently</title></head> <body bgcolor="white"> <center><h1>301 Moved Permanently</h1></center> <hr><center>openresty</center> </body> </html>
3. HTTP Method
- GET (查)
- POST (改)
- PUT (增)
- DELETE (删)
- HEAD (只返回响应头的GET)
- CONNECT (多用于WebSocket、HTTPS)
- OPTIONs、TRACE (多用于调试)
4. HTTP Status Code
状态代码有以下:
- 1xx:指示信息--表示请求已接收,继续处理。
- 2xx:成功--表示请求已被成功接收、理解、接受。
- 3xx:重定向--要完成请求必须进行更进一步的操作。
- 4xx:客户端错误--请求有语法错误或请求无法实现。
- 5xx:服务器端错误--服务器未能实现合法的请求。
常见状态代码、状态描述的说明如下。
- 200 OK:请求成功
- 301 Moved Permanently 永久性重定向
- 302 Move temporarily 临时重定向
- 304 Not Modified 客户端缓存没有更新
- 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
- 401 Unauthorized:没有身份认证
- 403 Forbidden:没有权限
- 404 Not Found:没有资源
- 500 Internal Server Error:发生不可预期的错误
- 503 Server Unavailable:暂时不能处理请求,一段时间后可能恢复正常
Get 和 Post 的区别?
无副作用:资源不变
幂等:执行多次,跟执行一次效果一致。
1. 在符合标准的情况下,Get运用于无副作用,幂等的场景,Post 多用于 有副作用,不幂等的场景。
2. Get 能缓存,Post 不能
3. Get 参数受限于url长度上限
4. Post 支持更多的编码类型,Get 只有urlencode